import random
import time
#1.构造15个学生键值对{姓名：分数}, 存入学生字典，姓名用'A', 'B', .....'O' 对应，分数为 [35,100]之间的随机整数，输出学生字典
dict1 = {}  #生成一个空字典
while len(dict1) < 15:      #用while循环生成15次
    i = random.randint(35, 100)  #随机生成35-100的数字
    x = random.randint(65, 79)   #65-90对应二十六字母，所以A-O对应65-79 随机打乱A-O
    dict1[chr(x)] = i  #chr函数
a=dict1
print(a)




#2.按照学生成绩降序排列输出字典；
a1 = sorted(a.items(), key=lambda x: x[1],reverse=True)  #降序 reverse=True
print('按降序后结果:{}'.format(a1))



#3.计算学生成绩平均分、最大值、最小值
b=list(a.values())  #把字典values值转换成数列赋值给b
print('最大值:{:^20.2f}'.format(max(b))) #最大值
print('最小值:{:^20.2f}'.format(min(b))) #最小值
average=sum(b)/len(b)               #sum函数计算总分 len函数统计列表长度(即学生个数)
print('平均分:{:^20.2f}'.format(average)) #平均分





#4.统计不合格人数
lst1=[] #生成一个空列表
for i in b:  #在b列表索引i
    if i<60:    #i的条件是小于60
       lst1.append(i)    #append函数将不及格分数添加到列表里
fail=len(lst1)  #统计list1长度，即不及格人数
print('不及格人数:{}'.format(fail))


#5.输入学生名字，输出学生成绩和水平，并统计查询次数，查询时间
check_num = 0                           #定义变量查询次数
y_or_n = input("是否查询成绩(yes/no)?")    #设定查询条件
start = time.perf_counter()              #代码运行时间计时
while y_or_n == "yes":                   #while循环
    try:
        name = input('请输入学生名字')
        mark = dict1.get(name)     #get函数获取字典里key也就是每个名字对应值也就是成绩
        if name in a:              #输入名字正确的情况
            check_num += 1   #当输入正确姓名后查询次数增加一次
            if mark > average:      #第一种情况该生成绩大于平均分
                print('成绩为:', dict1.get(name))
                print('该生成绩属于上等水平')
            elif mark == average:       #第二种情况该生成绩等于平均分
                print('成绩为:', dict1.get(name))
                print('该生成绩属于中等水平')
            elif mark < average:        #第三种情况该生成绩小于平均分
                print('成绩为:', dict1.get(name))
                print('该生成绩属于下等水平')
        else:                           #输入名字错误
            print('请输入正确学生名字')
    except:
        print('错误')
    y_or_n = input("是否继续查询(yes or no)?")    #询问是否继续执行

print('查询了:{}次'.format(check_num))       #跳出程序后打印的查询次数
during =time.perf_counter() - start         #计算程序运行时间
print('耗时:{.2f}s'.format(during))















